from typing import Protocol

from src.domain.user.aggregates.user import UserAggregate
from src.domain.user.value_objects import TelegramUserId, UserId


class UserRepo(Protocol):
    """
    Репозиторий пользователя
    """

    async def acquire_user_by_id(self, user_id: UserId) -> UserAggregate:
        """Получаем пользователя по id"""
        raise NotImplementedError

    # async def get_user_by_id(self, user_id: UUID) -> dto.UserDTO:
    #     """Получение пользователя с помощью id"""
    #     raise NotImplementedError

    # async def get_user_by_email(self, email: str) -> dto.UserDTO:
    #     """Получение пользователя с помощью email"""
    #     raise NotImplementedError

    async def update_user(self, user: UserAggregate) -> None:
        """Обновление данных пользователя"""
        raise NotImplementedError

    async def create_user(self, user: UserAggregate) -> None:
        """Создание пользователя"""
        raise NotImplementedError

    async def check_user_exists(self, user_tg_id: TelegramUserId) -> bool:
        """Проверяем, существует ли юзер с таким tg id"""
        raise NotImplementedError
